package net.xuele.learn.ttl;

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;

import static java.util.concurrent.TimeUnit.MINUTES;

public class TTLTest1 {

    private static final ThreadPoolExecutor bizPoolExecutor = new ThreadPoolExecutor
            (2, 2, 1, MINUTES,
                    new LinkedBlockingQueue<>(1));
    public static void main(String[] args) throws InterruptedException {
        // 1 创建线程变量
        InheritableThreadLocal<String> parent = new InheritableThreadLocal<>();
        // 2 投递三个任务，让线程池中的线程全部创建。没有这段则可以拿到。
        // 投递任务的时候，没有线程，则会进行线程的创建，创建的时候，父线程是main，
        // 如果在此之前设置数据，就能够获取到数据
        for (int i = 0; i < 3; ++i) {
            bizPoolExecutor.execute(() -> {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }
        // 3休眠4s
        Thread.sleep(4000);
        // 4.设置线程变量
        parent.set("value-set-in-parent");
        // 5. 提交任务到线程池
        bizPoolExecutor.execute(() -> {
            try {
                // 5.1访问线程变量
                System.out.println("parent:" + parent.get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }
}
